#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QIcon>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLineEdit>

#include "messageshowarea.h"
#include "messageeditarea.h"
#include "sessinofriendarea.h"
#include "selfinfowidget.h"
#include "loginwidget.h"
#include "toast.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWidget;
}
QT_END_NAMESPACE

class MainWidget : public QWidget
{
    Q_OBJECT

private:
    MainWidget(QWidget *parent = nullptr);

    void initUI();
    void initMainWindow();
    void initLeftWindow();
    void initMidWindow();
    void initRightWindow();

    void initSlot();        // 设置信号与槽
    void initWebSocket();   // 进行用户验证

    void switchTabToSession();
    void switchTabToFriend();
    void switchTabToApply();

    void loadSessionList();
    void loadFriendList();
    void loadApplyList();

private slots:
    void updateSessionList();
    void updateFriendList();
    void updateApplyList();
    void updateRecentMessages(const QString &chatSessionId);

public:
    static MainWidget* getInstance();

    void loadRecentMessages(const QString& chatSessionId);

    void switchToSession(const QString& userId);

    ~MainWidget();
    
    MessageShowArea * getMessageShowArea() { return m_messageShowArea; }

private:
    Ui::MainWidget *ui;

    enum ActiveTab{
        SESSION_LIST,   // 会话列表
        FRIEND_LIST,    // 好友列表
        APPLY_LIST      // 好友申请列表
    };
    ActiveTab m_activeTab = SESSION_LIST;

    // 左中右控件
    QWidget* m_leftWidget = nullptr;
    QWidget* m_midWidget = nullptr;
    QWidget* m_rightWidget = nullptr;
    SelfInfoWidget* m_selfInfo = nullptr; // 个人信息窗口

    //左侧布局
    QPushButton* m_userAvatar = nullptr;
    QPushButton* m_sessionTabBtn = nullptr;
    QPushButton* m_friendTabBtn = nullptr;
    QPushButton* m_applyTabBtn = nullptr;

    // 中间布局
    QLineEdit* m_searchEdit = nullptr;
    QPushButton* m_addFriendBtn = nullptr;
    SessinoFriendArea* m_sessionFriendArea = nullptr;

    // 右边布局
    MessageShowArea* m_messageShowArea = nullptr;     // 消息展示区
    MessageEditArea* m_messageEditArea = nullptr;     // 消息编辑区
    QPushButton *m_more = nullptr;          // 更多信息按钮
    QLabel* m_sessionTitle = nullptr;       // 标题标签
};
#endif // MAINWIDGET_H
